๊ฒฌ๊ณ ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ์ ํต์ฌ ๊ตฌ์ฑ์์๋ฅผ ํ๋ ์์ํฌ ์ ํ ๋ฐ ๊ตฌํ๋ถํฐ ํจ๊ณผ์ ์ธ ํ ์คํธ ์์ฑ ๋ชจ๋ฒ ์ฌ๋ก๊น์ง ์์๋ณด์ธ์. ๊ธ๋ก๋ฒ ๋์ ์ฌ๋ก์ ๊ณ ๊ธ ๊ธฐ์ ์ ๋ํด ๋ฐฐ์ธ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ: ํ๋ ์์ํฌ ๊ตฌํ์ ์ํ ์ข ํฉ ๊ฐ์ด๋
๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ์ธ๊ณ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฌ์ ํ ์ง๋ฐฐ์ ์ธ ํ์ ์ ์งํ๊ณ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด์ง์ ๋ฐ๋ผ ์ฝ๋ ํ์ง๊ณผ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ด ๋ฌด์๋ณด๋ค ์ค์ํด์ก์ต๋๋ค. ๊ฒฌ๊ณ ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ๋ ๋ ์ด์ ์ ํ ์ฌํญ์ด ์๋๋๋ค. ์ ์ง๋ณด์ ๊ฐ๋ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ๊ณ ํ์ง์ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ด ๊ฐ์ด๋์์๋ ํ๋ ์์ํฌ ์ ํ, ๊ตฌํ, ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ์ ๋ค๋ฃจ๋ฉฐ ๊ฐ๋ ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ ๊ตฌํ์ ๋ณต์ก์ฑ์ ์ฌ๋ ์๊ฒ ์ดํด๋ด ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ๊ฐ ์ค์ํ ์ด์ ๋ ๋ฌด์์ผ๊น์?
๊ธฐ์ ์ ์ธ ์ธก๋ฉด์ ์ดํด๋ณด๊ธฐ ์ ์, ํฌ๊ด์ ์ธ ํ ์คํธ ์ธํ๋ผ์ ํฌ์ํ๋ ๊ฒ์ด ์ ๊ทธํ ๋ก ์ค์ํ์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ทธ ์ด์ ์ ๋จ์ํ ๋ฒ๊ทธ๋ฅผ ์ก๋ ๊ฒ ์ด์์ผ๋ก ํ์ฅ๋ฉ๋๋ค:
- ์ฝ๋ ํ์ง ํฅ์: ํ ์คํธ๋ ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์ ๊ฒฐํจ์ ์๋ณํ๊ณ ์์ ํ๋ ๋ฐ ๋์์ ์ฃผ์ด ๋ ์ ๋ขฐํ ์ ์๊ณ ๊ฒฌ๊ณ ํ ์ฝ๋๋ฅผ ๋ง๋ญ๋๋ค.
- ๊ฐ๋ฐ ๋น์ฉ ์ ๊ฐ: ํ ์คํธ ์ค์ ๋ฒ๊ทธ๋ฅผ ์ฐพ์ ์์ ํ๋ ๊ฒ์ด ํ๋ก๋์ ํ๊ฒฝ์์ ์์ ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ ๋ ดํฉ๋๋ค.
- ๊ฐ๋ฐ ์ฃผ๊ธฐ ๋จ์ถ: ์๋ํ๋ ํ ์คํธ๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ์์์ํค์ง ์์ ๊ฒ์ด๋ผ๋ ํ์ ์ ๊ฐ์ง๊ณ ๋น ๋ฅด๊ณ ์์ ์๊ฒ ๋ฐ๋ณต ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ ํฅ์: ์ ํ ์คํธ๋ ์ฝ๋๋ ์ดํด, ์์ ๋ฐ ๋ฆฌํฉํ ๋ง์ด ๋ ์ฌ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ์ง๋ณด์ํ๊ธฐ๊ฐ ๋ ์ฉ์ดํฉ๋๋ค.
- ๋ฐฐํฌ์ ๋ํ ์์ ๊ฐ ์ฆ๊ฐ: ๊ฒฌ๊ณ ํ ํ ์คํธ ์ธํ๋ผ๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํต์ฌ ๊ธฐ๋ฅ์ด ๋ณดํธ๋๋ค๋ ๊ฒ์ ์๊ณ ๋ ํฐ ์์ ๊ฐ์ ๊ฐ์ง๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- ํ์ ์ด์ง: ํ์คํ๋ ํ ์คํธ ๊ดํ์ ๊ฐ๋ฐํ ๋ด, ํนํ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ ๊ฐ์ ๋ ๋์ ํ์ ์ ์ด์งํฉ๋๋ค.
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD) ์ง์: ํ ์คํธ๋ TDD์ ํต์ฌ์ผ๋ก, ์ฝ๋ ์์ฒด๋ณด๋ค ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ฉฐ ๋ ๋์ ์ค๊ณ์ ๊น๋ํ ์ฝ๋๋ก ์ด์ด์ง๋๋ค.
์ฌ๋ฐ๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ํ๋ ์์ํฌ ์ ํํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๋ ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ ๊ฐ์ง ์๋ง์ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๋ ๊ฒ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ, ํ์ ์ ๋ฌธ์ฑ ๋ฐ ์ ํธ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ค์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๊ณ ๋๋ฆฌ ์ฑํ๋ ๋ช ๊ฐ์ง ์ต์ ์ ๋๋ค:
1. Jest
Facebook์์ ๊ฐ๋ฐํ Jest๋ ๊ธฐ๋ฅ์ด ํ๋ถํ๊ณ ์ค์ ์ด ํ์ ์๋(zero-configuration) ํ ์คํธ ํ๋ ์์ํฌ๋ก ์ ์ ๋ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค. ์ฌ์ฉ ํธ์์ฑ, ๋น ๋ฅธ ์คํ ์๋, ๋ฐ์ด๋ ์ค๋ ์ท ํ ์คํธ ๊ธฐ๋ฅ์ผ๋ก ์ ๋ช ํฉ๋๋ค. Jest๋ ํนํ React ์ปดํฌ๋ํธ ํ ์คํธ์ ์ ํฉํ์ง๋ง ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฅ์ : ์ฌ์ด ์ค์ , ๋ด์ฅ๋ ๋ชจํน ๊ธฐ๋ฅ, ์ค๋ ์ท ํ ์คํธ, ๋ฐ์ด๋ React ์ง์, ๋น ๋ฅธ ํ ์คํธ ์คํ, ์ฐ์ํ ๋ฌธ์ํ.
- ๋จ์ : ๋ณต์กํ ํ ์คํธ ์๋๋ฆฌ์ค์์๋ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ณด๋ค ์ ์ฐ์ฑ์ด ๋จ์ด์ง ์ ์์ผ๋ฉฐ, ์ผ๋ถ๋ ๋ ์์ ์ธ(opinionated) ํน์ฑ์ด ์ ํ์ ์ด๋ผ๊ณ ๋๋ ์ ์์ต๋๋ค.
2. Mocha
Mocha๋ ์ ์ฐํ๊ณ ๋๋ฆฌ ์ฑํ๋ ํ ์คํธ ๋ฌ๋์ ๋๋ค. ํ ์คํธ ์์ฑ์ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ์ ๊ณตํ์ง๋ง, ๋จ์ธ(assertion) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ก๋ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ์ ํํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ ๋๋ถ์ ํ ์คํธ ํ๊ฒฝ์ ์ ํํ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ ๋ณต์กํ ํ๋ก์ ํธ์ ์ข์ ์ ํ์ ๋๋ค.
- ์ฅ์ : ๋์ ์ ์ฐ์ฑ, ๋ค์ํ ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์, ์ฑ์ํ ์ํ๊ณ, ์ฐ์ํ ์ปค๋ฎค๋ํฐ ์ง์.
- ๋จ์ : ๋จ์ธ ๋ฐ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํ ์ถ๊ฐ ์ค์ ์ด ํ์ํ๋ฉฐ, ์ด๊ธฐ ๊ตฌ์ฑ์ ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
3. Jasmine
Jasmine์ ์ฝ๊ณ ์ฐ๊ธฐ ์ฝ๋๋ก ์ค๊ณ๋ ํ๋ ์ฃผ๋ ๊ฐ๋ฐ(BDD) ํ๋ ์์ํฌ์ ๋๋ค. ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ชจํน ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ํ ์คํธ ์์ฑ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ํฌํจํ๊ณ ์์ต๋๋ค. Jasmine์ BDD ์ ๊ทผ ๋ฐฉ์์ ์ ํธํ๊ฑฐ๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ํฌ๊ด์ ์ธ ํ ์คํธ ์๋ฃจ์ ์ ์ํ ๊ฒฝ์ฐ ์ข์ ์ ํ์ ๋๋ค.
- ์ฅ์ : ์ฌ์ธ์ ์๋ฃจ์ , ๋ช ํํ BDD ๊ตฌ๋ฌธ, ์ฐ์ํ ๋ฌธ์ํ, ๋๋ฆฌ ์ฌ์ฉ๋จ.
- ๋จ์ : ์ผ๋ถ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ณด๋ค ๋๋ฆด ์ ์์ผ๋ฉฐ, Mocha๋ณด๋ค ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค๊ณ ๋๋ ์ ์์ต๋๋ค.
4. ๊ธฐํ ํ๋ ์์ํฌ
๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ ์กด์ฌํฉ๋๋ค:
- AVA: ๋์์ฑ๊ณผ ๋จ์์ฑ์ ์ค์ ์ ๋ ํ ์คํธ ๋ฌ๋์ ๋๋ค.
- QUnit: ์ฃผ๋ก jQuery ๋ฐ ๊ธฐํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ ์คํธ์ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ ๊ตฌํํ๊ธฐ
๊ตฌํ ๊ณผ์ ์ ์ ํํ ํ๋ ์์ํฌ ์ค์ , ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ํ ์คํธ ์์ฑ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ธ ๊ฐ์์ ๋๋ค:
1. ์ค์น ๋ฐ ์ค์
npm์ด๋ yarn๊ณผ ๊ฐ์ ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ํ ์คํธ ํ๋ ์์ํฌ์ ํ์ํ ์ข ์์ฑ์ ์ค์นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Jest๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํฉ๋๋ค:
npm install --save-dev jest
๋๋
yarn add --dev jest
์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํธ๋์คํ์ผ๋ฌ(์: Babel)์ ๊ฐ์ด ํ๋ก์ ํธ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ข ์์ฑ์ ์ค์นํด์ผ ํ ์๋ ์์ต๋๋ค. ์ผ๋ถ ํ๋ ์์ํฌ๋ ๊ตฌ์ฑ ํ์ผ(์: Jest์ `jest.config.js` ๋๋ Mocha์ ๊ตฌ์ฑ ํ์ผ)์ด ํ์ํ ์ ์์ต๋๋ค. ์ด ๊ตฌ์ฑ์ ํ ์คํธ ํ์ผ์ ์ฐพ์ ์์น ๋ฐ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ด ํ ์คํธ ํ๋ ์์ํฌ๊ฐ ์ด๋ป๊ฒ ๋์ํด์ผ ํ๋์ง๋ฅผ ์ ์ํฉ๋๋ค.
2. ํ ์คํธ ์์ฑ
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ธก๋ฉด์ ๋ค๋ฃจ๋ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค. ํน์ ๊ตฌ๋ฌธ์ ํ๋ ์์ํฌ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ์ผ๋ฐ์ ์ธ ์์น์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ํ ์คํธ๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค:
- ๋จ์ ํ ์คํธ: ๊ฐ๋ณ ํจ์๋ ๋ชจ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํฉ๋๋ค.
- ํตํฉ ํ ์คํธ: ์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ ๋ชจ๋ ๊ฐ์ ์ํธ ์์ฉ์ ํ ์คํธํฉ๋๋ค.
- ์๋ํฌ์๋(E2E) ํ ์คํธ: ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ํ ์คํธํฉ๋๋ค. E2E ํ ์คํธ์๋ Cypress, Playwright ๋๋ Selenium๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
๋ค์์ Jest๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ณธ ๋จ์ ํ ์คํธ ์์ ์ ๋๋ค:
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
// sum.test.js
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
ํ๋ ์์ํฌ์ ๋ช ๋ น์ค ์ธํฐํ์ด์ค(CLI)๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Jest์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก `npm test` ๋๋ `yarn test`๋ฅผ ์ฌ์ฉํฉ๋๋ค(`package.json` ํ์ผ์ ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ๋ค๊ณ ๊ฐ์ ).
3. ํ ์คํธ ๊ตฌ์ฑ
๊น๋ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ํ ์คํธ ์ธํ๋ผ๋ฅผ ์ ์งํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค:
- ํ์ผ ๊ตฌ์กฐ: ํ
์คํธํ ์์ค ์ฝ๋ ํ์ผ ์์ ํ
์คํธ ํ์ผ์ ๋ณด๊ดํ๋ฉฐ, ์ข
์ข
`__tests__` ๋๋ `tests` ๋๋ ํฐ๋ฆฌ์ ๋ก๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- `src/components/Button.js`
- `src/components/__tests__/Button.test.js`
- ํ ์คํธ ์ค์ํธ: ๊ด๋ จ ํ ์คํธ๋ฅผ describe ๋ธ๋ก(Mocha ๋ฐ Jasmine) ๋๋ ํ ์คํธ ์ค์ํธ(Jest) ๋ด์ ๊ทธ๋ฃนํํฉ๋๋ค.
- ๋ค์ด๋ฐ ์ปจ๋ฒค์ : ํ ์คํธ ํ์ผ๊ณผ ๊ฐ๋ณ ํ ์คํธ์ ์ค๋ช ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด: `Button.test.js` ๋ฐ `should render with correct text` ๋๋ `should trigger onClick`๊ณผ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค ์ด๋ฆ.
4. ํ ์คํธ ์คํ
ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ๋น๋ ํ๋ก์ธ์ค ๋ฐ ์ง์์ ์ธ ํตํฉ(CI) ํ์ดํ๋ผ์ธ๊ณผ ํตํฉํฉ๋๋ค. ๋๋ถ๋ถ์ ํ๋ ์์ํฌ๋ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํ CLI ๋ช ๋ น์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ช ๋ น์ ์ข ์ข ํจํค์ง ๊ด๋ฆฌ์(์: `npm test` ๋๋ `yarn test`)๋ฅผ ํตํด ์คํ๋ฉ๋๋ค. Jenkins, CircleCI, GitLab CI, GitHub Actions์ ๊ฐ์ CI ๋๊ตฌ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํธ์๋ ๋๋ง๋ค ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค.
ํจ๊ณผ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์์ฑ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ข์ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋งํผ ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ํต์ฌ ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
- ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ํ ์คํธ ์์ฑ: ํ ์คํธ๋ ์ดํดํ๊ธฐ ์ฌ์์ผ ํ๋ฉฐ ์ฝ๋์ ์์ ๋์์ ๋ช ํํ๊ฒ ๋ณด์ฌ์ฃผ์ด์ผ ํฉ๋๋ค. ์ง๋์น๊ฒ ๋ณต์กํ๊ฑฐ๋ ๋ํดํ ํ ์คํธ ๋ก์ง์ ํผํ์ธ์.
- ํ ์คํธ๋น ํ ๊ฐ์ง๋ง ํ ์คํธ: ๊ฐ ํ ์คํธ๋ ์ฝ๋์ ๋จ์ผ ์ธก๋ฉด์ ๊ฒ์ฆํ๋ ๋ฐ ์ง์คํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์คํจ ์์ธ์ ์ ํํ ์ฐพ์๋ด๊ณ ๋๋ฒ๊น ์ ๋จ์ํํ ์ ์์ต๋๋ค.
- ์ค๋ช ์ ์ธ ํ ์คํธ ์ด๋ฆ ์ฌ์ฉ: ํ ์คํธ ์ด๋ฆ์ ๋ฌด์์ ํ ์คํธํ๊ณ ๋ฌด์์ ๊ธฐ๋ํ๋์ง๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด์ผ ํฉ๋๋ค. `it('...ํ ๋ ...ํด์ผ ํ๋ค', () => { ... });` ํ์์ ์ฌ์ฉํ์ธ์.
- ํ ์คํธ ๊ฒฉ๋ฆฌ: ํ ์คํธ๊ฐ ์๋ก ๋ ๋ฆฝ์ ์ธ์ง ํ์ธํ์ธ์. ๊ฐ ํ ์คํธ๋ ์์ฒด์ ์ผ๋ก ์๊ฒฐ๋์ด์ผ ํ๋ฉฐ ๋ค๋ฅธ ํ ์คํธ์ ์ํ์ ์์กดํด์๋ ์ ๋ฉ๋๋ค. ์ด๋ ์ข ์ข ๊ฐ ํ ์คํธ ๋๋ ํ ์คํธ ์ค์ํธ ๋ด์์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ณ ํด์ ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
- ์์กด์ฑ ๋ชจํน: ์ปดํฌ๋ํธ๋ ํจ์๋ฅผ ํ ์คํธํ ๋, ์ด๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ํ๊ฒฝ์ ์ ์ดํ๊ธฐ ์ํด ์์กด์ฑ์ ๋ชจํนํฉ๋๋ค. ๋ชจํน์ ์ธ๋ถ ์์ธ์ด ํ ์คํธ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ฃ์ง ์ผ์ด์ค ํ ์คํธ: ์ฝ๋๊ฐ ์๊ธฐ์น ์์ ์ ๋ ฅ์ด๋ ์ํฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฃ์ง ์ผ์ด์ค์ ๊ฒฝ๊ณ ์กฐ๊ฑด์ ๋ค๋ฃน๋๋ค.
- ๋จ์ธ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ: ์์๋๋ ๋์์ ๊ฒ์ฆํ๊ธฐ ์ํด ์ ์ ํ ๋จ์ธ์ ์ ํํ์ธ์. ๋ ์ ์ตํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๊ตฌ์ฒด์ ์ธ ๋จ์ธ(์: `toBe`, `toEqual`, `toBeTruthy`)์ ์ฌ์ฉํ์ธ์.
- ํ ์คํธ ์ ์ง๋ณด์: ์ฝ๋๊ฐ ์งํํจ์ ๋ฐ๋ผ ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํ์ธ์. ํ ์คํธ ์ฝ๋๋ ํ๋ก๋์ ์ฝ๋์ ๋์ผํ ์์ค์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ ๋ค๋ฃจ์ด์ผ ํฉ๋๋ค. ํ ์คํธ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ๊ณ ๋ฆฌํฉํ ๋งํ์ฌ ์ ํํ๊ณ ๊ด๋ จ์ฑ ์๊ฒ ์ ์งํ์ธ์.
- ๋์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ์ถ๊ตฌ: ๋๋ถ๋ถ์ ์ฝ๋๊ฐ ํ ์คํธ๋ก ์ปค๋ฒ๋๋๋ก ๋์ ์์ค์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง(์: 80% ์ด์)๋ฅผ ๋ชฉํ๋ก ํ์ธ์. Istanbul(์ข ์ข Jest์ ํจ๊ป ์ฌ์ฉ๋จ)๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ธก์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ฏธ ์๋ ํ ์คํธ ์์ฑ์ ํฌ์ํ๋ฉด์ 100% ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ซ์ง ๋ง์ธ์.
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD) ์์ฉ: TDD๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๊น๋ํ๊ณ ํ ์คํธ ๊ฐ๋ฅํ ์ฝ๋์ ์๊ตฌ ์ฌํญ์ ๋ํ ๋ ๋์ ์ดํด๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ๋ฅผ ์ํ ๊ณ ๊ธ ๊ธฐ์
๊ฒฌ๊ณ ํ ๊ธฐ์ด๊ฐ ๋ง๋ จ๋๋ฉด ํ ์คํธ ์ธํ๋ผ๋ฅผ ํฅ์์ํค๊ธฐ ์ํด ๋ ๊ณ ๊ธ ํ ์คํธ ๊ธฐ์ ์ ํ์ํ ์ ์์ต๋๋ค.
1. ํ ์คํธ ๋๋ธ (Mocks, Stubs, Spies)
ํ ์คํธ ๋๋ธ์ ํ ์คํธ ๋์ ์ ๋์ ์์กด์ฑ์ ์ ์ด๋ ๋์ฒด๋ฌผ๋ก ๊ต์ฒดํ์ฌ ๊ฒฉ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ธ ๊ฐ์ง ์ฃผ์ ์ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Mocks: ์์กด์ฑ์ ๋์์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉ๋์๋์ง ํ์ธํฉ๋๋ค.
- Stubs: ์์กด์ฑ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋์๋์ง ํ์ธํ์ง ์๊ณ ํจ์ ํธ์ถ์ ๋ํด ๋ฏธ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ๋ ์๋ต์ ์ ๊ณตํฉ๋๋ค.
- Spies: ์์กด์ฑ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋์๋์ง(์: ํจ์๊ฐ ๋ช ๋ฒ ํธ์ถ๋์๋์ง, ์ด๋ค ์ธ์๊ฐ ์ ๋ฌ๋์๋์ง) ์ถ์ ํฉ๋๋ค.
๋๋ถ๋ถ์ ํ ์คํธ ํ๋ ์์ํฌ๋ ๋ด์ฅ๋ ๋ชจํน ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Jest๋ ๊ฐ๋ ฅํ ๋ชจํน ์์คํ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
2. ์ค๋ ์ท ํ ์คํธ
์ค๋ ์ท ํ ์คํธ๋ ์ปดํฌ๋ํธ๋ ํจ์์ ์ถ๋ ฅ์ ์บก์ฒํ์ฌ ์ด์ ์ ์ ์ฅ๋ ์ค๋ ์ท๊ณผ ๋น๊ตํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ UI ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ์ฌ ์ปดํฌ๋ํธ๊ฐ ์์๋๋ก ๋ ๋๋ง๋๋์ง ํ์ธํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค. ์ค๋ ์ท์ด ๋ณ๊ฒฝ๋๋ฉด ํ ์คํธ๊ฐ ์คํจํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ ค์ค๋๋ค.
Jest๋ ๋ด์ฅ๋ ์ค๋ ์ท ํ ์คํธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ค๋ ์ท ํ ์คํธ๋ ์์ฑํ๊ธฐ ์ฝ๊ณ UI ์ปดํฌ๋ํธ์ ์๊ธฐ์น ์์ ๋ณ๊ฒฝ์ ๊ฐ์งํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋๋ ๋ณ๊ฒฝ์ด ์์ ๋๋ ์ค๋ ์ท์ ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
3. ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ
์์ฑ์ ํ ์คํธ๋ผ๊ณ ๋ ์๋ ค์ง ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ๋ ํน์ ์ ๋ ฅ-์ถ๋ ฅ ์์ ํ ์คํธํ๋ ๋์ ์ฝ๋๊ฐ ๋ง์กฑํด์ผ ํ๋ ์์ฑ์ ์ ์ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ ์คํธ ํ๋ ์์ํฌ๋ ๋ฌด์์ ์ ๋ ฅ์ ์์ฑํ๊ณ ์์ฑ์ด ์ ์ง๋๋์ง ํ์ธํฉ๋๋ค. ์ด๋ ๊ธฐ์กด ํ ์คํธ์์ ๋์น ์ ์๋ ์ฃ์ง ์ผ์ด์ค์ ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
fast-check(์๋ฐ์คํฌ๋ฆฝํธ์ฉ)๊ณผ ๊ฐ์ ํ๋ ์์ํฌ๋ ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ ์ ์ํ์ ํจ์๋ ๊ด๋ฒ์ํ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ํ ์คํธํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
4. ์ฑ๋ฅ ํ ์คํธ
์ฑ๋ฅ ํ ์คํธ๋ ์ฝ๋์ ์๋์ ํจ์จ์ฑ์ ์ธก์ ํฉ๋๋ค. ์ด๋ ์ฑ๋ฅ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ค์ํฉ๋๋ค. ๋๊ตฌ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํจ์๋ ์ปดํฌ๋ํธ์ ์คํ ์๊ฐ์ ์ธก์ ํ์ธ์.
์ฑ๋ฅ ํ ์คํธ ๋๊ตฌ ๋ฐ ๊ธฐ์ ์๋ Node.js์ `perf_hooks` ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Node.js ํ๊ฒฝ์ฉ)๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
5. ์ง์์ ์ธ ํตํฉ(CI) ๋ฐ ์ง์์ ์ธ ๋ฐฐํฌ(CD)์์ ํตํฉ
CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ์ธ์. CI/CD ์์คํ (์: Jenkins, CircleCI, GitLab CI, GitHub Actions)์ ๊ตฌ์ฑํ์ฌ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฅ์์ ํธ์๋ ๋๋ง๋ค ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์คํํ๋๋ก ํฉ๋๋ค. ํ ์คํธ๊ฐ ์คํจํ๋ฉด ๋น๋๊ฐ ์คํจํ์ฌ ์ ์ฌ์ ์ผ๋ก ๋ฒ๊ทธ๊ฐ ์๋ ์ฝ๋์ ๋ฐฐํฌ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑธ์ณ ์ฝ๋ ํ์ง์ด ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
๊ธ๋ก๋ฒ ํ์ ์ํ ํ ์คํธ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ๋ ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ธ์:
- ์๊ฐ๋: ํ์ ๊ธ๋ก๋ฒ ๋ถํฌ์ ๊ฐ์ฅ ์ ํฉํ ์๊ฐ์ ํ ์คํธ๊ฐ ์คํ๋๋๋ก ์ผ์ ์ ์ก์ผ์ธ์. ๋ถ์ฐ ํ ์คํธ๋ฅผ ์ง์ํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ฌธํ์ ๋ฏผ๊ฐ์ฑ: ํ ์คํธ์์ ๋ฌธํ์ ์ผ๋ก ๋ฏผ๊ฐํ ์ธ์ด๋ ์์ ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. ์ธ์ด ์ฐจ์ด๋ฅผ ์ผ๋์ ๋๊ณ ํ ์คํธ ์ด๋ฆ๊ณผ ๋ฉ์์ง๊ฐ ๋ชจ๋ ํ์์๊ฒ ๋ช ํํ๊ณ ์ดํดํ๊ธฐ ์ฝ๋๋ก ํ์ธ์.
- ํ์ ๋๊ตฌ: ๋ค๋ฅธ ์๊ฐ๋ ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ๊ณผ ์กฐ์ ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ํ์ ๋๊ตฌ(์: Slack, Microsoft Teams)๋ฅผ ์ฌ์ฉํ์ธ์.
- ๋ฒ์ ๊ด๋ฆฌ: ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ํ ๊ฐ์ ํ์ ์ ํ์ฉํ๊ณ ์ฝ๋ ๋ณ๊ฒฝ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ฒฌ๊ณ ํ ๋ฒ์ ๊ด๋ฆฌ(์: Git)๋ฅผ ๊ตฌํํ์ธ์.
- ๋ฌธ์ํ: ์ค์ ์ง์นจ, ํ ์คํธ ๊ฐ์ด๋๋ผ์ธ ๋ฐ ์ฝ๋ ์์ ๋ฅผ ํฌํจํ์ฌ ํ ์คํธ ์ธํ๋ผ์ ๋ํ ํฌ๊ด์ ์ธ ๋ฌธ์๋ฅผ ์ ๊ณตํ์ธ์. ์ด ๋ฌธ์๋ ์์น์ ๊ด๊ณ์์ด ๋ชจ๋ ํ์์ด ์ ๊ทผํ ์ ์์ด์ผ ํฉ๋๋ค.
- ์๋ํ: ์๋ ์์ ์ ์ค์ด๊ณ ํ ์คํธ ํ๋ก์ธ์ค์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์๋ํ๋ฅผ ์์ฉํ์ธ์. ์ฌ๊ธฐ์๋ ์๋ํ๋ ํ ์คํธ ์คํ, ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ถ์ ๋ฐ ๋ณด๊ณ ๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์ ๊ทผ์ฑ: ๊ฐ์ธ์ ํ์๋ ๋ฅ๋ ฅ์ ๊ด๊ณ์์ด ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ํ ์คํธ์ ์ ๊ทผํ ์ ์๋๋ก ํ์ธ์. ์ฌ๊ธฐ์๋ ๋ช ํํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ณ ํ ์คํธ ๋๊ตฌ๊ฐ ๋ณด์กฐ ๊ธฐ์ ๊ณผ ํธํ๋๋์ง ํ์ธํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ค์ ์ฌ๋ก ๋ฐ ๊ตญ์ ์ ๋์
์ ์ธ๊ณ์ ๋ง์ ์ฑ๊ณต์ ์ธ ๊ธฐ์ ๋ค์ด ๊ฒฌ๊ณ ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ๋ฅผ ์ฑํํ์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์์ ๋๋ค:
- Netflix: Netflix๋ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์คํธ๋ฆฌ๋ฐ ๊ฒฝํ์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด Jest์ Cypress๋ฅผ ํฌํจํ ํ ์คํธ ํ๋ ์์ํฌ ์กฐํฉ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ค์ ๋ค์ํ ์ฅ์น์ ๋คํธ์ํฌ์์ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํ ์๋ํฌ์๋ ํ ์คํธ์ ์ค์ ์ ๋๋ ๋ฑ ๊ธ๋ก๋ฒ ์๋น์ค์ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํฌ๊ด์ ์ธ ํ ์คํธ ์ ๋ต์ ์ฑํํ์ต๋๋ค.
- Airbnb: Airbnb๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋จ์, ํตํฉ ๋ฐ ์๋ํฌ์๋ ํ ์คํธ๋ฅผ ํฌํจํ ๋ค์ํ ํ ์คํธ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ค์ ์ข ์ข Jest์ React Testing Library๋ฅผ ์ฌ์ฉํ์ฌ React ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ๊ณ ์ ์ธ๊ณ ์ฌํ๊ฐ์๊ฒ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค. ํ๋ซํผ์ด ์ง์ํ๋ ๋ค์ํ ์ฅ์น์ ์ฌ์ฉ์ ํ๊ฒฝ์ ๊ณ ๋ คํ ๋ UI ํ ์คํธ์ ๋ํ ๊ทธ๋ค์ ์ง์ค์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- Shopify: Shopify๋ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋์ ์๋น์ค ํ์ค์ ์ ์งํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ํ ์คํธ ๋ฌธํ๋ฅผ ๊ฐ์กฐํฉ๋๋ค. ๊ทธ๋ค์ ์ผ๋ฐ์ ์ผ๋ก Jest, Mocha, Cypress๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํต์ฌ ํ๋ซํผ ๊ธฐ๋ฅ์์ ํ๋งค์์ฉ ๊ธฐ๋ฅ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ชจ๋ ๊ฒ์ ํฌ๊ดํ์ฌ ๊ธ๋ก๋ฒ ํ๋ซํผ ์ ๋ฐ์ ๊ฑธ์ณ ํ์ง์ ๋ณด์ฅํ๊ธฐ ์ํด ์ข ์ข ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ์์ฉํฉ๋๋ค.
๊ฒฐ๋ก
๊ฒฌ๊ณ ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ์ธํ๋ผ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๊ณ ํ์ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๊ณ , ํจ๊ณผ์ ์ธ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ , ๊ณ ๊ธ ๊ธฐ์ ์ ์์ฉํจ์ผ๋ก์จ ์ฝ๋ ํ์ง์ ํฌ๊ฒ ํฅ์์ํค๊ณ , ๊ฐ๋ฐ ๋น์ฉ์ ์ ๊ฐํ๋ฉฐ, ํ์ ์์ฐ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์น ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ณ์ ์ง๋ฐฐํจ์ ๋ฐ๋ผ ๊ฐ๋ ฅํ ํ ์คํธ ๊ธฐ๋ฐ์ ๋ ์ด์ ์ ํ ์ฌํญ์ด ์๋๋๋ค. ๊ธ๋ก๋ฒ ์์ฅ์์์ ์ฑ๊ณต์ ์ํด ํ์์ ์ ๋๋ค. ํน์ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ํ ์คํธ ์ ๋ต์ ์กฐ์ ํ๊ณ ํ๊ณผ ํ๋ ฅํ์ฌ ํ์ง, ์ ์ง๋ณด์์ฑ ๋ฐ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ํ๋ฅญํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ค์ํ๋ ํ ์คํธ ๋ฌธํ๋ฅผ ๋ง๋์ญ์์ค.